序言
在部署网站或服务时,启用 HTTPS 已成为必不可少的安全措施。申请 SSL/TLS 证书的方式有很多,其中 Let’s Encrypt 提供了免费且自动化的证书签发服务,适合大多数场景。为了简化证书的申请、安装和续期流程,Github 社区开发了轻量级的自动化工具 acme.sh,支持多家 DNS 服务商的 API 验证,可以实现完全无人值守的证书管理。
本文将以 腾讯云 DNS 为例,介绍如何通过 acme.sh 脚本自动化申请并配置 SSL 证书,确保网站在使用 HTTPS 时既安全又省心。
操作指南
1. 获取腾讯云 DNS API 密钥
- 登录 腾讯云控制台 → 访问管理 → API 密钥管理。
- 创建新密钥(或使用现有密钥),记录:
SecretId(如AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******)SecretKey(如Gu5t9xGARNpq86cd98joQYCN3*******)
注意:建议创建一个子账户做权限隔离。
2. 安装 acme.sh
1 | # 安装(使用独立脚本避免权限问题) |
3. 配置腾讯云 API 密钥
1 | # 将密钥写入 acme.sh 配置(永久存储) |
1 | # 重新加载环境变量 |
其他厂商可以参考:https://github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_tencent
4. 申请证书(DNS API 验证)
1 | # 为域名 example.com 申请证书(通配符域名需加 *.),Let's Encrypt 通配符证书免费,支持多级域名 |
- 自动完成验证:acme.sh 会调用腾讯云 API 添加
_acme-challenge.leeqingshui.com的 TXT 记录。 - 证书位置:
~/.acme.sh/leeqingshui.com/
5. 安装证书到 Web 服务器
示例
1 | # 示例:复制证书到 Nginx 目录 |
demo
1 | # 示例:复制证书到 Nginx 目录 |
6. 验证自动续期
1 | # 手动模拟续期测试 |
输出示例(每天自动检查续期):
1 | 0 0 * * * "/root/.acme.sh"/acme.sh --cron |
关键配置说明
| 项目 | 说明 |
|---|---|
| API 密钥 | 需 DNSPod.Full 权限(权限文档) |
| 通配符证书 | 使用 -d *.example.com 申请 |
| 证书目录 | 勿直接使用 ~/.acme.sh/ 中的文件(续期时会更新),应通过 --install-cert 复制 |
| 多域名支持 | 添加多个 -d 参数(如 -d example.com -d api.example.com) |